#ifndef _STATIC_QUEUE
#define _STATIC_QUEUE

#include "graph.h"


typedef struct queue *Queue;

/**
 * @fn queueCreate
 * @brief Cria uma fila e devolve o apontador para a fila criada ou NULL se nao existir memória
 */
Queue queueCreate();


/**
 * @fn queueDestroy
 * @brief Destrói a fila apontada por ptrq e poe ptr a NULL. Devolve OK ou NO_QUEUE
 * @param ptrq Apontador para a fila que se quer destruir
 */
int queueDestroy(Queue *ptrq);


/**
 * @fn queueEnqueue
 * @brief Coloca o int na cauda da fila apontada por q. Devolve OK, NO_QUEUE ou QUEUE_FULL
 * @param q Fila onde se quer inserir o elemento à cauda
 * @param num Elemento a inserir
 */
int queueEnqueue(Queue q, Node nd);


/**
 * @fn queueDequeue
 * @brief Retira o elemento da cabeça da fila apontada por q. Devolve OK, NO_QUEUE, NULL_PTR ou QUEUE_EMPTY
 * @param q Fila onde se quer retirar o elemento à cabeça
 * @param num Elemento a remover
 */
int queueDequeue(Queue q, Node *nd);


/**
 * @fn queueEmpty
 * @brief Verifica se a fila está vazia
 * @return Devolve 1 se a fila estiver vazia e 0 se não
 */
int queueEmpty(Queue ptrq);


#endif